﻿
//----------------------------------------------------------------------------------------
// Copyright (C) 2007  毛才君有限公司 版权所有。
//
// 文件编号：      
// 文 件 名：      DbHelperSQL.cs
// 文件功能描述：   数据实行层
//
// 创建标识：      毛才君    2007-12-12 14:30:47
//
// 修改标识：
// 修改描述：
// 
// 修改标识：
// 修改描述：
//----------------------------------------------------------------------------------------

#if (!(NET_1_1 && NET_2_0))
#define NET_2_0
#endif

using System.Collections;
using System.Data;
using System.Data.Common;

namespace MaoCaiJun.DataBase.Sys.Dal
{
    /// <summary>
    /// 数据访问基础类(基于SQLServer)
    /// </summary>
    public interface IDBHelper
    {
        #region 公用方法
        /// <summary>
        /// 得到最大ID
        /// </summary>
        /// <param name="FieldName"></param>
        /// <param name="TableName"></param>
        /// <param name="strWhere"></param>
        /// <returns></returns>
        decimal GetMaxId(string fieldName, string tableName, string strWhere);
        /// <summary>
        /// 是否存在该记录
        /// </summary>
        /// <param name="Tablename"></param>
        /// <param name="Field"></param>
        /// <param name="Value"></param>
        /// <returns></returns>
        bool Exists(string tableName, string field, object value);

        /// <summary>
        /// 创建表
        /// </summary>
        /// <param name="TableName"></param>
        /// <param name="CreateTableSql"></param>
        void CreateDataBase(string tableName, string createTableSql);
       
        #endregion

        #region  执行简单SQL语句

        /// <summary>
        /// 执行SQL语句，返回影响的记录数
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <returns>影响的记录数</returns>
        int ExecuteSql(string strSql);
        /// <summary>
        /// 执行多条SQL语句，实现数据库事务。
        /// </summary>
        /// <param name="strSqlList">多条SQL语句</param>		
        void ExecuteSqlTran(ArrayList strSqlList);
        /// <param name="strSqlList">多条SQL语句</param>		
        /// <param name="UpdateBatchSize"></param>
        DataSet ExecuteSqlTran(ArrayList strSqlList, out int upDateBatchSize);
        /// <summary>
        /// 执行带一个存储过程参数的的SQL语句。
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <param name="content">参数内容,比如一个字段是格式复杂的文章，有特殊符号，可以通过这个方式添加</param>
        /// <returns>影响的记录数</returns>
        int ExecuteSql(string strSql, string content);
        /// <summary>
        /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
        /// </summary>
        /// <param name="strSQL">SQL语句</param>
        /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
        /// <returns>影响的记录数</returns>
        int ExecuteSqlInsertImg(string strSql, byte[] fs);

        /// <summary>
        /// 执行一条计算查询结果语句，返回查询结果（object）。
        /// </summary>
        /// <param name="strSql">计算查询结果语句</param>
        /// <returns>查询结果（object）</returns>
        object GetSingle(string strSql);
        /// <summary>
        /// 执行查询语句，返回DbDataReader
        /// </summary>
        /// <param name="strSQL">查询语句</param>
        /// <returns>DbDataReader</returns>
        DbDataReader ExecuteReader(string strSql);
        /// <summary>
        /// 执行查询语句，返回DataSet
        /// </summary>
        /// <param name="strSql">查询语句</param>
        /// <returns>DataSet</returns>
        DataSet Query(string strSql);

        #endregion

        #region 执行带参数的SQL语句

        /// <summary>
        /// 执行SQL语句，返回影响的记录数
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <param name="cmdParms"></param>
        /// <returns>影响的记录数</returns>
        int ExecuteSql(string strSql, params System.Data.Common.DbParameter[] cmdParms);


        /// <summary>
        /// 执行多条SQL语句，实现数据库事务。
        /// </summary>
        /// <param name="strSqlList">SQL语句的哈希表（key为sql语句，value是该语句的System.Data.Common.DbParameter[]）</param>
        void ExecuteSqlTran(Hashtable strSqlList);
        /// <summary>
        /// 执行多条SQL语句，实现数据库事务。
        /// </summary>
        /// <param name="strSqlList">SQL语句的哈希表（key为sql语句，value是该语句的System.Data.Common.DbParameter[]）</param>
        /// <param name="UpdateBatchSize"></param>
        DataSet ExecuteSqlTran(Hashtable strSqlList, out int upDateBatchSize);
        /// <summary>
        /// 执行一条计算查询结果语句，返回查询结果（object）。
        /// </summary>
        /// <param name="strSql">计算查询结果语句</param>
        /// <param name="cmdParms"></param>
        /// <returns>查询结果（object）</returns>
        object GetSingle(string strSql, params System.Data.Common.DbParameter[] cmdParms);

        /// <summary>
        /// 执行查询语句，返回DBDataReader
        /// </summary>
        /// <param name="strSql">查询语句</param>
        /// <param name="cmdParms"></param>
        /// <returns>DbDataReader</returns>
        DbDataReader ExecuteReader(string strSql, params System.Data.Common.DbParameter[] cmdParms);

        /// <summary>
        /// 执行查询语句，返回DataSet
        /// </summary>
        /// <param name="strSql">查询语句</param>
        /// <param name="cmdParms"></param>
        /// <returns>DataSet</returns>
        DataSet Query(string strSql, params System.Data.Common.DbParameter[] cmdParms);


        #endregion

        #region 存储过程操作

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <returns>DbDataReader</returns>
        DbDataReader RunProcedure(string storedProcName, IDataParameter[] parameters);

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <param name="tableName">DataSet结果中的表名</param>
        /// <returns>DataSet</returns>
        DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName);




        /// <summary>
        /// 执行存储过程，返回影响的行数		
        /// </summary>
        /// <param name="storedProcName">存储过程名</param>
        /// <param name="parameters">存储过程参数</param>
        /// <param name="rowsAffected">影响的行数</param>
        /// <returns></returns>
        int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected);
        #endregion  成员方法
    }

}
